package br.com.srv.componentes.comandos.service;

import java.util.Date;

import br.com.srv.commons.dao.hibernate.BasicDAO;
import br.com.srv.commons.service.impl.BasicServiceImpl;
import br.com.srv.componentes.comandos.dao.ComandoDAO;
import br.com.srv.componentes.comandos.to.ComandoEnvioTO;
import br.com.srv.componentes.veiculo.dao.VeiculoDAO;
import br.com.srv.model.ConfiguracaoTO;
import br.com.srv.model.MotoristaTO;
import br.com.srv.model.VeiculoTO;

public class ComandoServiceImpl extends BasicServiceImpl implements ComandoService {
	
	ComandoDAO comandoDAO;
	VeiculoDAO veiculoDAO;
	BasicDAO basicDAO;

	public boolean salvarComando(ComandoEnvioTO comandoTO) {
		return comandoDAO.salvarComando(comandoTO);
	}
	
	public boolean ativarPermissaoMotorista(MotoristaTO motoristaTO, VeiculoTO veiculoTO, String usuarioResponsavelId) {
		
		String serialVeiculo = veiculoDAO.buscarSerialbyId(veiculoTO.getRealId().toString());
		motoristaTO = (MotoristaTO)getBasicDAO().findById(MotoristaTO.class, motoristaTO.getId());
		
		ComandoEnvioTO comandoEnvioTO = new ComandoEnvioTO();
		comandoEnvioTO.setComando(ComandoEnvioTO.COMANDO_ATV_PERMISSAO_MOTORISTA + motoristaTO.getCodigo());
		comandoEnvioTO.setIdUsuarioResponsavel(new Integer(usuarioResponsavelId));
		comandoEnvioTO.setSerialVeiculo(serialVeiculo);
		
		return comandoDAO.salvarComando(comandoEnvioTO);
	}
	
	public boolean desativarPermissaoMotorista(MotoristaTO motoristaTO, VeiculoTO veiculoTO, String usuarioResponsavelId) {
		
		boolean resultado = false;
		String serialVeiculo = veiculoDAO.buscarSerialbyId(veiculoTO.getRealId().toString());
		
		if (serialVeiculo != null) {
			ComandoEnvioTO comandoEnvioTO = new ComandoEnvioTO();
			comandoEnvioTO.setComando(ComandoEnvioTO.COMANDO_DES_PERMISSAO_MOTORISTA + motoristaTO.getCodigo());
			comandoEnvioTO.setIdUsuarioResponsavel(new Integer(usuarioResponsavelId));
			comandoEnvioTO.setSerialVeiculo(serialVeiculo);
			
			resultado = comandoDAO.salvarComando(comandoEnvioTO);
		}
		
		return resultado;
	}

	public boolean salvarTelefones(String veiculoId, Integer usuarioResponsavelId, ConfiguracaoTO configuracaoTO) {
		
		String serialVeiculo = veiculoDAO.buscarSerialbyId(veiculoId);
		
		String telefones = configuracaoTO.getTelefone1();
		telefones += "," + configuracaoTO.getTelefone2();
		telefones += "," + configuracaoTO.getTelefone3();
		telefones += "," + configuracaoTO.getTelefone4();
		
		ComandoEnvioTO comandoEnvioTO = new ComandoEnvioTO();
		comandoEnvioTO.setComando(ComandoEnvioTO.COMANDO_CONFIGURAR + telefones);
		comandoEnvioTO.setIdUsuarioResponsavel(new Integer(usuarioResponsavelId));
		comandoEnvioTO.setSerialVeiculo(serialVeiculo);
		
		return comandoDAO.salvarComando(comandoEnvioTO);
	}

	public ConfiguracaoTO buscarTelefonesPanicoAlarme(String veiculoId) {
		
		String serialVeiculo = veiculoDAO.buscarSerialbyId(veiculoId);
		
		String comandoStr = comandoDAO.buscarUltimoComando(serialVeiculo, ComandoEnvioTO.COMANDO_CONFIGURAR);
		
		ConfiguracaoTO configuracaoTO = new ConfiguracaoTO();

		if (comandoStr != null && !"".equals(comandoStr)) {
				comandoStr = comandoStr.substring(ComandoEnvioTO.COMANDO_CONFIGURAR.length());
				String[] telefonesArray = comandoStr.split(",");
				if (telefonesArray.length >= 1) {
					configuracaoTO.setTelefone1(telefonesArray[0]);
				}
				if (telefonesArray.length >= 2) {
					configuracaoTO.setTelefone2(telefonesArray[1]);
				}
				if (telefonesArray.length >= 3) {
					configuracaoTO.setTelefone3(telefonesArray[2]);
				}
				if (telefonesArray.length >= 4) {
					configuracaoTO.setTelefone4(telefonesArray[3]);
				}
		}
		
		return configuracaoTO;
	}
	
	public boolean bloquearVeiculoById(Integer usuarioResponsavelId, VeiculoTO veiculoTO) {
		
		String serialVeiculo = veiculoDAO.buscarSerialbyId(veiculoTO.getId().toString());
		
		ComandoEnvioTO comandoEnvioTO = new ComandoEnvioTO();
		comandoEnvioTO.setComando(ComandoEnvioTO.COMANDO_BLOQUEAR);
		comandoEnvioTO.setSerialVeiculo(serialVeiculo);
		comandoEnvioTO.setDataCadastro(new Date());
		comandoEnvioTO.setStatus(ComandoEnvioTO.ST_PENDENTE);
		comandoEnvioTO.setIdUsuarioResponsavel(usuarioResponsavelId);
		
		return comandoDAO.salvarComando(comandoEnvioTO);
	}

	public boolean desbloquearVeiculoById(Integer usuarioResponsavelId, VeiculoTO veiculoTO) {
		
		String serialVeiculo = veiculoDAO.buscarSerialbyId(veiculoTO.getId().toString());
		
		ComandoEnvioTO comandoEnvioTO = new ComandoEnvioTO();
		comandoEnvioTO.setComando(ComandoEnvioTO.COMANDO_DESBLOQUEAR);
		comandoEnvioTO.setSerialVeiculo(serialVeiculo);
		comandoEnvioTO.setDataCadastro(new Date());
		comandoEnvioTO.setStatus(ComandoEnvioTO.ST_PENDENTE);
		comandoEnvioTO.setIdUsuarioResponsavel(usuarioResponsavelId);
		
		return comandoDAO.salvarComando(comandoEnvioTO);
	}	
	
	public ComandoDAO getComandoDAO() {
		return comandoDAO;
	}

	public void setComandoDAO(ComandoDAO comandoDAO) {
		this.comandoDAO = comandoDAO;
	}

	public VeiculoDAO getVeiculoDAO() {
		return veiculoDAO;
	}

	public void setVeiculoDAO(VeiculoDAO veiculoDAO) {
		this.veiculoDAO = veiculoDAO;
	}

	public BasicDAO getBasicDAO() {
		return basicDAO;
	}

	public void setBasicDAO(BasicDAO basicDAO) {
		this.basicDAO = basicDAO;
	}
	
}
